<template>
	<div class="wrapper">
		<!-- header部分 -->
		<header>
			<p>商品列表</p>
		</header>

		<!-- 商家logo部分 -->
		<div class="business-logo">
			<img :src="business.data?.businessImg" :alt="business.data?.businessName">
		</div>

		<!-- 商家信息部分 -->
		<div class="business-info">
			<h1>{{business.data?.businessName}}</h1>
			<p>&#165;{{business.data?.startPrice}}起送 &#165;{{business.data?.deliveryPrice}}配送</p>
			<p>{{business.data?.businessExplain}}</p>
		</div>

		<!-- 食品列表部分 -->
		<ul class="food">
			<li v-for="(item,index) in foodArr" :key="item.id">
				<div class="food-left">
					<img :src="item.foodImg" :alt="item.foodName">
					<div class="food-left-info">
						<h3>{{item.foodName}}</h3>
						<p>{{item.foodExplain}}</p>
						<p>&#165;{{item.foodPrice}}</p>
					</div>
				</div>
				<div class="food-right">
					<div>
						<i class="fa fa-minus-circle" @click="minus(index)" v-show="item.quantity > 0"></i>
					</div>
					<p><span v-show="item.quantity > 0">{{item.quantity}}</span></p>
					<div>
						<i class="fa fa-plus-circle" @click="add(index)"></i>
					</div>
				</div>
			</li>
		</ul>

		<!-- 购物车部分 -->
		<div class="cart">
			<div class="cart-left">
				<div class="cart-left-icon"
					:style="totalQuantity === 0 ? 'background-color:#505051;' : 'background-color:#3190E8;'">
					<i class="fa fa-shopping-cart"></i>
					<div class="cart-left-icon-quantity" v-show="totalQuantity > 0">{{totalQuantity}}</div>
				</div>
				<div class="cart-left-info">
					<p>&#165;{{totalPrice.toFixed(2)}}</p>
					<p>另需配送费{{business.data?.deliveryPrice}}元</p>
				</div>
			</div>
			<div class="cart-right">
				<!-- 不够起送费 -->
				<div class="cart-right-item" v-show="totalSettle < business.data?.startPrice"
					style="background-color: #535356;cursor: default;">
					&#165;{{business.data?.startPrice}}起送
				</div>
				<!-- 达到起送费 -->
				<div class="cart-right-item" @click="toOrders" v-show="totalSettle >= business.data?.startPrice">
					去结算
				</div>
			</div>
		</div>
	</div>
</template>

<script>
	export default {
		name: 'BusinessInfo',
		data() {
			return {
				businessId: this.$route.query.businessId,
				business: {},
				foodArr: []
			}
		},
		created() {
			const token = localStorage.getItem('id_token');
			if (!token) {
				this.$router.push('/login');
				return;
			}

			// 获取商家信息（GET /api/businesses/{id}）
			this.$axios.get(`businesses/${this.businessId}`, {
				headers: {
					'Authorization': `Bearer ${token}`
				}
			}).then(response => {
				const result = response.data;
				if (result.success && result.code === 200) {
					this.business = result;
				} else {
					alert('获取商家信息失败：' + (result.message || '未知错误'));
				}
			}).catch(error => {
				console.error('获取商家信息出错：', error);
			});

			// 获取商品列表（GET /api/foods?business={id}）
			this.$axios.get('foods', {
				params: {
					business: this.businessId
				},
				headers: {
					'Authorization': `Bearer ${token}`
				}
			}).then(response => {
				const result = response.data;
				if (result.success && result.code === 200) {
					// 初始化商品数量为0
					this.foodArr = result.data.map(item => ({
						...item,
						quantity: 0
					}));
					// 获取购物车数据
					this.listCart();
				} else {
					alert('获取商品列表失败：' + (result.message || '未知错误'));
				}
			}).catch(error => {
				console.error('获取商品列表出错：', error);
			});
		},
		methods: {
			// 获取购物车列表并更新商品数量
			listCart() {
				const token = localStorage.getItem('id_token');
				// 调用GET /api/carts接口获取购物车数据
				this.$axios.get('carts', {
					params: {
						businessId: this.businessId, // 商家ID
					},
					headers: {
						'Authorization': `Bearer ${token}`
					}
				}).then(response => {
					const result = response.data;
					if (result.success && result.code === 200) {
						const cartItems = result.data;

						// 遍历商品列表，更新对应数量
						this.foodArr.forEach(food => {
							// 筛选当前商家且当前商品的购物车项
							const relevantItems = cartItems.filter(item =>
								item.business.id === Number(this.businessId) &&
								item.food.id === food.id
							);

							// 计算总数量（累加所有匹配项的数量）
							food.quantity = relevantItems.reduce((sum, item) => sum + item.quantity, 0);
						});
					} else {
						alert('获取购物车失败：' + (result.message || '未知错误'));
					}
				}).catch(error => {
					console.error('获取购物车出错：', error);
				});
			},

			// 增加商品数量
			add(index) {
				const token = localStorage.getItem('id_token');
				if (!token) {
					this.$router.push('/login');
					return;
				}

				const food = this.foodArr[index];
				const newQuantity = food.quantity + 1;

				// 调用PATCH /api/carts接口更新数量
				this.$axios.patch('carts', {
					foodId: food.id,
					businessId: this.businessId,
					quantity: newQuantity
				}, {
					headers: {
						'Authorization': `Bearer ${token}`
					}
				}).then(response => {
					const result = response.data;
					if (result.success && result.code === 200) {
						// 更新本地数量
						food.quantity = newQuantity;
					} else {
						alert('添加失败：' + (result.message || '未知错误'));
					}
				}).catch(error => {
					console.error('更新购物车出错：', error);
				});
			},

			// 减少商品数量
			minus(index) {
				const token = localStorage.getItem('id_token');
				if (!token) {
					this.$router.push('/login');
					return;
				}

				const food = this.foodArr[index];
				// 确保数量不会小于0
				if (food.quantity <= 0) return;

				const newQuantity = food.quantity - 1;

				// 调用PATCH /api/carts接口更新数量
				this.$axios.patch('carts', {
					foodId: food.id,
					businessId: this.businessId,
					quantity: newQuantity
				}, {
					headers: {
						'Authorization': `Bearer ${token}`
					}
				}).then(response => {
					const result = response.data;
					if (result.success && result.code === 200) {
						// 更新本地数量
						food.quantity = newQuantity;
					} else {
						alert('减少失败：' + (result.message || '未知错误'));
					}
				}).catch(error => {
					console.error('更新购物车出错：', error);
				});
			},

			// 前往结算页面
			toOrders() {
				if (this.totalQuantity === 0) return;

				this.$router.push({
					path: '/Orders',
					query: {
						businessId: this.businessId,
						totalPrice: this.totalPrice
					}
				});
			}
		},
		computed: {
			// 计算购物车商品总价
			totalPrice() {
				return this.foodArr.reduce((total, item) => total + item.foodPrice * item.quantity, 0);
			},
			// 计算购物车商品总数量
			totalQuantity() {
				return this.foodArr.reduce((sum, item) => sum + item.quantity, 0);
			},
			// 计算结算总价（商品总价+配送费）
			totalSettle() {
				return this.totalPrice + (this.business.data?.deliveryPrice || 0);
			}
		}
	}
</script>

<style scoped>
	/****************** 总容器 ******************/
	.wrapper {
		width: 100%;
		height: 100%;
	}

	/****************** header部分 ******************/
	.wrapper header {
		width: 100%;
		height: 12vw;
		background-color: #0097FF;
		color: #fff;
		font-size: 4.8vw;

		position: fixed;
		left: 0;
		top: 0;
		z-index: 1000;

		display: flex;
		justify-content: center;
		align-items: center;
	}

	/****************** 商家logo部分 ******************/
	.wrapper .business-logo {
		width: 100%;
		height: 35vw;
		/*使用上外边距避开header部分*/
		margin-top: 12vw;

		display: flex;
		justify-content: center;
		align-items: center;
	}

	.wrapper .business-logo img {
		width: 40vw;
		height: 30vw;
		border-radius: 5px;
	}

	/****************** 商家信息部分 ******************/
	.wrapper .business-info {
		width: 100%;
		height: 20vw;

		display: flex;
		flex-direction: column;
		justify-content: center;
		align-items: center;
	}

	.wrapper .business-info h1 {
		font-size: 5vw;
	}

	.wrapper .business-info p {
		font-size: 3vw;
		color: #666;
		margin-top: 1vw;
	}

	/****************** 食品列表部分 ******************/
	.wrapper .food {
		width: 100%;
		/*使用下外边距避开footer部分*/
		margin-bottom: 14vw;
	}

	.wrapper .food li {
		width: 100%;
		box-sizing: border-box;
		padding: 2.5vw;
		user-select: none;

		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	.wrapper .food li .food-left {
		display: flex;
		align-items: center;
	}

	.wrapper .food li .food-left img {
		width: 20vw;
		height: 20vw;
	}

	.wrapper .food li .food-left .food-left-info {
		margin-left: 3vw;
	}

	.wrapper .food li .food-left .food-left-info h3 {
		font-size: 3.8vw;
		color: #555;
	}

	.wrapper .food li .food-left .food-left-info p {
		font-size: 3vw;
		color: #888;
		margin-top: 2vw;
	}

	.wrapper .food li .food-right {
		width: 16vw;
		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	.wrapper .food li .food-right .fa-minus-circle {
		font-size: 5.5vw;
		color: #999;
		cursor: pointer;
	}

	.wrapper .food li .food-right p {
		font-size: 3.6vw;
		color: #333;
	}

	.wrapper .food li .food-right .fa-plus-circle {
		font-size: 5.5vw;
		color: #0097EF;
		cursor: pointer;
	}

	/****************** 购物车部分 ******************/
	.wrapper .cart {
		width: 100%;
		height: 14vw;

		position: fixed;
		left: 0;
		bottom: 0;

		display: flex;
	}

	.wrapper .cart .cart-left {
		flex: 2;
		background-color: #505051;
		display: flex;
	}

	.wrapper .cart .cart-left .cart-left-icon {
		width: 16vw;
		height: 16vw;
		box-sizing: border-box;
		border: solid 1.6vw #444;
		border-radius: 8vw;
		background-color: #3190E8;
		font-size: 7vw;
		color: #fff;

		display: flex;
		justify-content: center;
		align-items: center;

		margin-top: -4vw;
		margin-left: 3vw;

		position: relative;
	}

	.wrapper .cart .cart-left .cart-left-icon-quantity {
		width: 5vw;
		height: 5vw;
		border-radius: 2.5vw;
		background-color: red;
		color: #fff;
		font-size: 3.6vw;

		display: flex;
		justify-content: center;
		align-items: center;

		position: absolute;
		right: -1.5vw;
		top: -1.5vw;
	}

	.wrapper .cart .cart-left .cart-left-info p:first-child {
		font-size: 4.5vw;
		color: #fff;
		margin-top: 1vw;
	}

	.wrapper .cart .cart-left .cart-left-info p:last-child {
		font-size: 2.8vw;
		color: #AAA;
	}

	.wrapper .cart .cart-right {
		flex: 1;
	}

	/*达到起送费时的样式*/
	.wrapper .cart .cart-right .cart-right-item {
		width: 100%;
		height: 100%;
		background-color: #38CA73;
		color: #fff;
		font-size: 4.5vw;
		font-weight: 700;
		user-select: none;
		cursor: pointer;

		display: flex;
		justify-content: center;
		align-items: center;
	}

	/*不够起送费时的样式（只有背景色和鼠标样式的区别）*/
	/*
	.wrapper .cart .cart-right .cart-right-item{
		width: 100%;
		height: 100%;
		background-color: #535356;
		color: #fff;
		font-size: 4.5vw;
		font-weight: 700;
		user-select: none;
		
		display: flex;
		justify-content: center;
		align-items: center;
	}
	*/
</style>